Java Generics-এ Unbounded Wildcards হলো একটি বিশেষ বৈশিষ্ট্য, যা <?> চিহ্ন দ্বারা বোঝানো হয়। এটি এমন একটি wildcard টাইপ যা যেকোনো টাইপকে গ্রহণ করতে পারে। <?> সাধারণত তখন ব্যবহার করা হয়, যখন মেথড বা ডেটা স্ট্রাকচারে টাইপ প্যারামিটারটি গুরুত্বপূর্ণ নয় বা নির্দিষ্ট টাইপের উপর নির্ভর করে না।
Unbounded Wildcards এর ব্যবহার:
<?> ব্যবহার করে নিম্নলিখিত ক্ষেত্রে কাজ করা হয়:
- ডেটার টাইপ নির্দিষ্ট না থাকলে।
- মেথড শুধুমাত্র ডেটা পড়ার জন্য ব্যবহৃত হলে (write অপারেশন প্রয়োজন না হলে)।
- বিভিন্ন টাইপের Collection এর সাথে কাজ করার সময়।
Syntax:
Collection<?> collection = new ArrayList<>();
উদাহরণ এবং ব্যবহার:
1. Unbounded Wildcard দিয়ে একটি মেথড:
import java.util.List;
public class UnboundedWildcardExample {
// Method with unbounded wildcard
public static void printList(List<?> list) {
for (Object element : list) {
System.out.println(element);
}
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<String> strList = List.of("A", "B", "C");
// Unbounded wildcard method calls
printList(intList); // Works with Integer list
printList(strList); // Works with String list
}
}
আউটপুট:
1
2
3
A
B
C
2. Unbounded Wildcard এবং Collections:
import java.util.ArrayList;
import java.util.List;
public class CollectionExample {
public static void displayCollection(List<?> collection) {
for (Object obj : collection) {
System.out.println(obj);
}
}
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add("Java");
stringList.add("Generics");
List<Double> doubleList = new ArrayList<>();
doubleList.add(3.14);
doubleList.add(1.618);
displayCollection(stringList); // Accepts String type list
displayCollection(doubleList); // Accepts Double type list
}
}
আউটপুট:
Java
Generics
3.14
1.618
Unbounded Wildcard-এর সুবিধা:
- Reusable Methods: বিভিন্ন টাইপের Collections বা Objects এর সাথে কাজ করার জন্য একটি মেথড ব্যবহার করা যায়।
- Flexibility: টাইপ নির্দিষ্ট না থাকলেও কোড চালানো সম্ভব।
- টাইপ Safety: যদিও টাইপ নির্দিষ্ট নয়, তবে শুধুমাত্র ডেটা পড়ার জন্য এটি ব্যবহার করা হয়, ফলে টাইপ-সংক্রান্ত সমস্যা এড়ানো যায়।
সীমাবদ্ধতা (Limitations):
ডেটা Write করা যায় না:
<?>ব্যবহার করে Collections-এ নতুন ডেটা যোগ করা সম্ভব নয়, কারণ টাইপ অজানা। শুধুnullযোগ করা যায়।List<?> list = new ArrayList<>(); list.add("Hello"); // কম্পাইল টাইম ত্রুটি list.add(null); // ঠিক আছে- Read-Only Use: Unbounded Wildcards সাধারণত ডেটা পড়ার জন্য ব্যবহৃত হয়। যদি ডেটা মডিফাই বা Write করার প্রয়োজন হয়, তাহলে Bounded Wildcards (
<? extends T>বা<? super T>) ব্যবহার করা উচিত।
যখন Unbounded Wildcards ব্যবহার করবেন:
- যখন আপনি শুধু Collection-এর উপাদানগুলি পড়বেন।
- টাইপ প্যারামিটার নির্দিষ্ট করার প্রয়োজন নেই।
- কোডের টাইপ-স্বাধীনতা এবং পুনর্ব্যবহারযোগ্যতা বাড়ানোর জন্য।
Content added By
Read more